AWS Glue 実践入門:Triggerを使ってスケジュールやJob完了イベントでJobを実行する
今日は登録したJobをスケジュール実行したり、他のJobの完了イベントでJobを実行させることができる Trigger についてご紹介します。
目次
Trigger の種類
Triggerの種類(Trigger type)は On-demand、Schedule、Jobs completed の3種類です。
On-demand
On-demandは、マネジメントコンソールから Start Trigger して起動します。このTriggerに指定したJobが完了すると、完了を監視するすべての(後述する)Jobs completed の Triggerも起動され、依存するジョブが開始されます。Jobsのジョブをオンデマンドで実行した場合は、Jobs completed の Triggerは起動しません。
Schedule
Scheduleは、cronに基づく時間指定のトリガーです。例えば、毎日・毎週・毎月といった一定の周期(Frequency)やcron形式でスケジュールを設定できます。
Frequency
スケジュールの周期(Frequency)は、以下の一覧から選択します。
Cron expression
上記のスケジュールの周期(Frequency)で、Customを選択した場合は、Cron expressionに指定します。
※ cron指定では5分未満の指定はできません。
- Cron指定の例
分 | 時 | 日 | 月 | 曜日 | 年 | 意味 |
---|---|---|---|---|---|---|
0 | 10 | * | * | ? | * | 毎日10:00 am (UTC) に実行する |
15 | 12 | * | * | ? | * | 毎日12:15 pm (UTC) に実行する |
0 | 18 | ? | * | MON-FRI | * | 月曜日から金曜日まで 6:00 pm (UTC) に実行する |
0 | 8 | 1 | * | ? | * | 月の最初の8:00 am (UTC) に実行する |
0/15 | * | * | * | ? | * | 15分毎に実行する |
0/10 | * | ? | * | MON-FRI | * | 月曜日から金曜日まで 10分毎に実行する |
0/5 | 8–17 | ? | * | MON-FRI | * | 月曜日から金曜日までの 8:00 am (UTC) から 5:55 pm (UTC) の時間帯に5分毎に実行する |
詳細は、Time-Based Schedules for Jobs and Crawlers を御覧ください。
Jobs completed
前のJobまたは複数のJobが完了したイベントに基づくTriggerです。このTriggerは、依存関係があるJobの完了時に起動します。
Schedule
ここではScheduleのTriggerを登録して実行を試してみます。実行する条件と1つ以上のJobをSchedule Triggerに登録します。
Trigger Properties
Trigger nameと、PM17:00(UTC)に自動起動するようにFrequencyはCustom
、Cron Expressionは0 17 * * ? *
を指定します。
Jobs to start
スケジュール実行するJobを指定します。ここでは複数のジョブを指定可能です。ここではflightsdb01
ジョブを選択しました。
Review all steps
内容の確認です。指定した時刻はUTCであることをご注意ください。
Scheduleの有効化
登録直後は、まだスケジュールの状態がCREATED
なので、ACTIVATED
に変更する必要があります。
Click to enable it now をクリックするとダイアログが表示されます。
[Enable]ボタンを押すと直ちに有効になります。
有効になるとTrigger StatusがACTIVATED
になりました。
ACTIVATED
やDEACTIVATED
の設定は、Trigger name を選択して、ActionからDisable trigger
/Enable trigger
で変更可能です。スケジュール登録はするけど、普段は止めておきたいといった場合に便利な機能です。
Job実行の確認
Jobの実行状況は、JobメニューからJob nameを選択して確認します。flightsdb01
ジョブがRunningであることが確認できます。
On-demand
ここではOn-demandのTriggerを登録して実行を試してみます。1つ以上のJobをOn-demand Triggerに登録します。
Trigger properties
Trigger nameを指定します。
Jobs to Start
スケジュール実行するJobを指定します。ここでは複数のジョブを指定可能です。ここではflightsdb01
ジョブとflightsdb02
ジョブを選択しました。
Review all steps
2つのジョブが登録されていることが確認できます。
Click to start it now(On-demand Triggerの開始)
Click to start it now をクリックするとダイアログが表示されます。
もちろん、Trigger name を選択して、[Action]から[Satrt trigger]でも実行可能です。
Job実行の確認
複数のJobを登録した場合、全て同時に実行されます。
Jobの実行状況は、JobメニューからJob nameを選択して確認します。flightsdb01
ジョブがRunningであることが確認できます。
同様にflightsdb02
ジョブがRunningであることが確認できます。
Jobs completed
ここではJobs completedのTriggerを登録して実行を試してみます。依存関係のある1つ以上のジョブ(Watched Jobs)と、実行したい1つ以上のJobをJobs completed の Triggerに登録します。
Trigger properties
Trigger nameと、依存関係のある1つ以上のジョブ(Watched Jobs)を指定します。ここではflightsdb03
ジョブをWatched Jobsに選択しました。
Jobs to Start
1つ以上の実行するJobを指定します。ここではflightsdb02
ジョブを選択しました。つまり、flightsdb03
ジョブが完了したらflightsdb02
ジョブが実行されるというTriggerになります。
Review all steps
この表示では実行されるflightsdb02
ジョブが表示されます。
Jobs completed の有効化
登録直後は、まだスケジュールの状態がCREATED
なので、ACTIVATED
に変更する必要があります。
Click to enable it now をクリックするとダイアログが表示されます。
[Enable]ボタンを押すと直ちに有効になります。
有効になるとTrigger StatusがACTIVATED
になりました。
依存関係のあるflightsdb03
ジョブの実行
準備ができましたので、flightsdb03
ジョブが完了したらflightsdb02
ジョブが実行されるという動作を確認します。
OnDemandTriggerで実行するJobをflightsdb03
ジョブに変更して、OnDemandTriggerします。flightsdb03
ジョブがRunningになったことを確認できます。
flightsdb03
ジョブの完了イベントで、flightsdb02
ジョブの実行
flightsdb03
ジョブの実行が完了すると、flightsdb02
ジョブが開始されることを確認できました。
最後に
本番環境のETL Jobは単体で実行するのではなく、関連のある複数のジョブをまとめたり、ジョブ間の依存関係を鑑みて、スケジュール実行することが求められます。AWS Glueではそれらの機能をTriggerとして実装されていることがご理解いただけたと思います。
よって、AWS GlueのTriggerは、
- 複数のJobをまとめて実行する、ジョブグループ的な使い方ができる
- 依存関係のある複数のJob間の実行順を定義できる
- 上記に対して、オンデマンドとスケジュールで実行をできる
本番環境でジョブを実行するときは、この Triggerを活用してJob管理することをお勧めいたします。